Lazy loaded image
🛡️Debian 12 小内存 VPS 防卡死保命加固方案:SSHD、SWAP、earlyoom 与 Watchdog
字数 1283阅读时长≈ 4 分钟
2026-7-25
2026-7-25
这篇文章记录我在 Debian 12(4GB 内存 + 2GB SWAP) 上落地的一套「防卡死 / 保命」加固方案:为 sshd 提供更高的生存优先级、用 SWAP 做缓冲、用 earlyoom 进行提前抢救,并用 内核 Panic + systemd Watchdog 作为最终兜底,尽量把“只能重装”的事故变成“自动恢复”。
💡
我之所以这么折腾,是因为用的是“白嫖/低价”机器:很多时候 登不上厂商后台,也没法远程 SSH / 重启 / 重装。一旦系统 OOM 或死锁卡死,SSH 断掉就等于直接失联;所以这套方案的目标只有一个:让机器尽可能自愈,至少把 SSH 留住。
适用场景:小内存 VPS、偶发 OOM / 假死、需要尽量保证 SSH 不被杀,以及系统死锁时希望自动重启自愈。说明:以下均为系统级配置(不依赖 Docker)。

快速总结

  • sshd:OOMScoreAdjust=-1000,尽量避免被 OOM 干掉
  • swap:2GB swap + vm.swappiness=10,给系统留缓冲
  • earlyoom:内存 ≤ 4% 且 swap ≤ 5% 触发清理,豁免 sshd/1panel
  • panic + watchdog:彻底死锁时 60 秒后硬重启自愈

第一部分:核心通道 —— SSHD 高优先级与资源保障

直接修改系统自带的 SSH 服务配置,赋予其最高 OOM 免死金牌和实时 CPU 抢占权。

1)编辑 ssh.service

在 [Service] 节点下追加以下 5 行参数:
保存退出后,重载并重启 SSH 服务:

第二部分:缓冲层 —— 创建与挂载 2GB SWAP 分区

在物理内存和崩溃之间架起安全气囊,同时设置合理的 swappiness 减少磁盘磨损。

第三部分:安全打手 —— 配置 earlyoom 预警抢救守护

在内存濒死(内存 ≤ 4% 且 SWAP ≤ 5%)时精准清理吃内存大户,同时严格豁免 sshd 和 1panel。

第四部分:终极兜底 —— 内核 Panic 与 Systemd 硬件看门狗(Watchdog)

在系统彻底死锁、无法通过软件挽救时,提供 60 秒后的硬重启自愈机制。

1)配置内核级崩溃自动重启

2)挂载内核软狗模块(softdog)

3)配置 systemd 全局看门狗

找到并取消注释(或直接追加)以下两行:
保存退出后,重载使看门狗正式生效:

🔍 一键验证脚本(检查是否全部生效)

预期检查结果应该长什么样?

不同机器的内存数值、PID、时间戳会不一样;你主要核对 关键字段是否对。

判定标准

看到这些就说明配置基本到位:
  • sshd:输出必须是 -1000(否则说明 OOM 豁免没生效)
  • swap:Swap: 2.0Gi 且 free 也接近 2.0Gi(刚启用时常见为 0 使用)
  • earlyoom:状态为 active (running),命令行参数里能看到 -m 4 -s 5 --avoid "(^|/)(sshd.*|1panel)" -r 3600
  • watchdog:/dev/watchdog 存在(字符设备 crw-------),kernel.panic=60 与 vm.panic_on_oom=1 正确

📝 小结

这套方案不是为了让小内存 VPS 变成高配机器,而是为了在内存吃紧、服务异常、系统假死时尽量争取恢复窗口:先保住 SSH,再用 SWAP 缓冲,再让 earlyoom 提前清理,最后用 Panic 和 Watchdog 做硬兜底。
对于没有稳定控制台、无法随时重启或重装的低价机器来说,这种“保命配置”能把很多原本只能手动救援的事故,变成系统自动恢复。
上一篇
OpenWrt 下 OpenClash 完美配合 Cloudflare Tunnel 直连配置指南
下一篇
用 Docker 部署 Tailscale DERP,并用 NPM 反代 + 伪装(端口安全策略)